package com.mt.mtyx.search.service.impl;

import com.alibaba.fastjson2.JSON;
import com.mt.mtyx.entity.product.Category;
import com.mt.mtyx.entity.product.SkuInfo;
import com.mt.mtyx.entity.search.SkuEs;
import com.mt.mtyx.enums.SkuType;
import com.mt.mtyx.product.ProductFeignClient;
import com.mt.mtyx.search.repository.SkuRepository;
import com.mt.mtyx.search.service.SkuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author WMT
 * @Date 2023/7/21 15:55
 */
@Slf4j
@Service
public class SkuServiceImpl implements SkuService {

    @Autowired
    private SkuRepository skuRepository;

    @Autowired
    private ProductFeignClient productFeignClient;

    @Override
    public void upperSku(Long skuId) {
        log.info("上架商品id:{}", skuId);
        SkuEs skuEs = new SkuEs();
        // 1. 远程调用查询商品信息
        SkuInfo skuInfo = productFeignClient.getSkuInfoById(skuId);
        if (skuInfo == null) {
            return;
        }
        Category category = productFeignClient.getCategoryById(skuInfo.getCategoryId());
        if (category != null) {
            skuEs.setCategoryId(category.getId());
            skuEs.setCategoryName(category.getName());
        }
        // 2.给es数据赋值
        skuEs.setId(skuInfo.getId());
        skuEs.setKeyword(skuInfo.getSkuName() + "," + skuEs.getCategoryName());
        skuEs.setWareId(skuInfo.getWareId());
        skuEs.setIsNewPerson(skuInfo.getIsNewPerson());
        skuEs.setImgUrl(skuInfo.getImgUrl());
        skuEs.setTitle(skuInfo.getSkuName());
        // 普通商品
        if (skuInfo.getSkuType().equals(SkuType.COMMON.getCode())) {
            skuEs.setSkuType(0);
            skuEs.setPrice(skuInfo.getPrice().doubleValue());
            skuEs.setStock(skuInfo.getStock());
            skuEs.setSale(skuInfo.getSale());
            skuEs.setPerLimit(skuInfo.getPerLimit());
        } else {
            //TODO 待完善-秒杀商品

        }
        SkuEs es = skuRepository.save(skuEs);
        log.info("上架的商品:{}", JSON.toJSONString(es));
    }

    @Override
    public void lowerSku(Long skuId) {
        // 下架， 直接从elasticsearch里面删除
        skuRepository.deleteById(skuId);
    }

    @Override
    public List<SkuEs> getHotSkuList() {
        // 0 代表第一页
        Pageable pageable = PageRequest.of(0, 10);
        Page<SkuEs> page = skuRepository.getByOrderByHotScoreDesc(pageable);
        if (page != null) {
            return page.getContent();
        }
        return null;
    }
}
